有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java复制数组引用

我有一个数组int[3][3],初始位置如下:

(A)

block[0][0] = 1;
block[0][1] = 1;
block[0][2] = 1;
block[1][0] = 1;
block[1][1] = 1;
block[1][2] = 1;
block[2][0] = 1;
block[2][1] = 0;
block[2][2] = 1;

//Visually
1 1 1
1 1 1
1 0 1

我有一个方法,它接受“0”元素并随上面的元素更改,因此下一个状态是:

(B)

1 1 1
1 0 1
1 1 1

但问题是,我想用这个位置创建一个新的数组(称为aux),并且不要覆盖块数组(a)

这是我的密码:

//Creating array B
int[][] aux = new int[3][3];
aux = block; //load the values of original array
aux[line][row] = aux[line-1][row];
aux[line-1][row] = 0;

但是当我检查输出时,我也覆盖了原始数组(块)

因此,我让数组块和数组AUX具有相同的值,并且没有将数组块与原始数据一起保留

===========================================================================

编辑:

我尝试使用clone和copyOf函数,但结果也影响了原始阵列。 这是我的密码:

System.out.println("INITIAL BLOCK VALUES");
            System.out.println(
                            bloco[0][0] +""+
                            bloco[0][1] +""+
                            bloco[0][2] +
                            "\n"+
                            bloco[1][0]+
                            bloco[1][1]+
                            bloco[1][2]+
                            "\n"+
                            bloco[2][0] +
                            bloco[2][1] +
                            bloco[2][2]
                    );



            //Cloning original array to a new one
            int[][] aux = bloco.clone();

            //Here what I'm doing is changing the first element of AUX, just for test
            aux[0][0] = 9;




            // Block array shouldnt be affected! Lets check it out:

            System.out.println("FINAL BLOCK VALUES");
            System.out.println(
                                    bloco[0][0] +""+
                            bloco[0][1] +""+
                            bloco[0][2] +
                            "\n"+
                            bloco[1][0]+
                            bloco[1][1]+
                            bloco[1][2]+
                            "\n"+
                            bloco[2][0] +
                            bloco[2][1] +
                            bloco[2][2]
                    );

输出为:

INITIAL BLOCK VALUES
111
111
101
FINAL BLOCK VALUES
911
111
101

有什么想法吗

OBS:此代码位于名为“Node”的类的函数中,构造函数是:

public Nodo( int[][] blocos )
        {
            this.bloco = blocos;
        }

共 (1) 个答案

  1. # 1 楼答案

    此程序显示在不更改原始数组值的情况下将原始数组复制到新数组中

     class Array
     {
    public static void main (String[] args) {
    
       int[][] block = new int[3][3];
     //load the values of original array
    
      block[0][0] = 1;
      block[0][1] = 1;
      block[0][2] = 1;
      block[1][0] = 1;
      block[1][1] = 1;
      block[1][2] = 1;
      block[2][0] = 1;
      block[2][1] = 0;
      block[2][2] = 1;
      int[] [] aux=new int[3][3];
      for(int i=0;i<3;i++)
      {
    for(int j=0;j<block[i].length;j++)
         {
      aux[i][j]=block[i][j];
         }
     System.out.print("\n");
      }
     aux[1][1]=0;//replace array value 
     aux[2][1]=1;//replace array value 1
     System.out.print("Old   Array \n");
     for(int i=0;i<3;i++)
     {
    for(int j=0;j<block[i].length;j++)
       {
     System.out.print(block[i][j]);
       }
     System.out.print("\n");
     }
     System.out.print("New  Array \n");
     for(int i=0;i<3;i++) 
     {
    for(int j=0;j<block[i].length;j++)
        {
      System.out.print(aux[i][j]);
        }
           System.out.print("\n");
       }
      }
     }
    

    outpur:aux的数组是

       Old  Array 
        111
        111
        101
       New Array 
        111
        101
        111